package servlets;

import java.io.IOException;
import java.rmi.NotBoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.naming.CommunicationException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import businessDelegate.Delegate;
import dto.CuentaCorrienteDTO;
import dto.EmpresaDTO;
import dto.ParticularDTO;
import dto.ProductoDTO;

/**
 * Servlet implementation class AltaCliente
 */

@WebServlet(name="SrvAltaCliente", urlPatterns={"/SrvAltaCliente"}) 
public class SrvAltaCliente extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SrvAltaCliente() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if(request.getParameter("origen").contentEquals("particular"))
		{
			System.out.println("Entro a particular");
			String nombre = request.getParameter("nombre");
			String apellido = request.getParameter("apellido");
			String dni = request.getParameter("dni");
			
			ParticularDTO particular = new ParticularDTO();
			particular.setDNI(dni);
			particular.setApellido(apellido);
			particular.setNombre(nombre);
			//System.out.println("DNI" + particular.getDNI() +  " Apellido"+ particular.getApellido() +" Nombre" + particular.getNombre());
			try {
				boolean resultado = Delegate.getInstancia().saveParticular(particular);
				if (resultado == true) {
					//aqui se coloca el FWD hacia la pagina a la que quieras ir una vez terminada el alta del cliente
					RequestDispatcher rd = request.getRequestDispatcher("index.jsp?msg=El cliente fue creado con exito");
					rd.forward(request, response);
				}
			} catch (CommunicationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NotBoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}
		
		if(request.getParameter("origen").contentEquals("empresa"))
		{
			System.out.println("Entro a empresa");
			String cuit = request.getParameter("cuit");
			String razonSocial = request.getParameter("razonSocial");
			String montoMinimo = request.getParameter("montoMinimo");			
			String fechaCuentaCorriente = request.getParameter("fechaCuentaCorriente");
			String saldo = request.getParameter("saldo");			
			EmpresaDTO empresa = new EmpresaDTO();
			CuentaCorrienteDTO cuentaCorriente = new CuentaCorrienteDTO();
			if (Float.valueOf(saldo)!=null)
				cuentaCorriente.setSaldo(Float.valueOf(saldo));
			else
				cuentaCorriente.setSaldo(0);			
			empresa.setCUIT(cuit);
			empresa.setRazonSocial(razonSocial);
			if (Float.valueOf(montoMinimo)!=null)
				empresa.setMontoMinimoAutorizacion(Float.valueOf(montoMinimo));
			else
				empresa.setMontoMinimoAutorizacion(0);
			SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
			try {
		 
				Date date = formatter.parse(fechaCuentaCorriente);
				System.out.println(date);
				System.out.println(formatter.format(date));
				cuentaCorriente.setFechaApertura(date);		 
			} catch (ParseException e) {
				e.printStackTrace();
				cuentaCorriente.setFechaApertura(null);
			}			
			empresa.setCuentaCorriente(cuentaCorriente);
			
			try {
				boolean resultado = Delegate.getInstancia().saveEmpresa(empresa);
				if (resultado == true) {
					//aqui se coloca el FWD hacia la pagina a la que quieras ir una vez terminada el alta del cliente
					RequestDispatcher rd = request.getRequestDispatcher("index.jsp?msg="
									+ "El cliente fue creado con exito");
					rd.forward(request, response);
				}
				
			} catch (CommunicationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NotBoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(request.getParameter("origen").contentEquals("altaProductosLoad"))
		{
			List <EmpresaDTO> clientesEmpresas;
			try {
				clientesEmpresas = Delegate.getInstancia().getEmpresaList();
				request.setAttribute("ClientesEmpresas", clientesEmpresas);
			} catch (CommunicationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NotBoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			request.getRequestDispatcher("jsp/altaProductosEmpresa.jsp").forward(request, response);	
		}
		
		if(request.getParameter("origen").contentEquals("empresaProductos"))
		{
			String idEmpresa = request.getParameter("clienteEmpresa");
			String[] nombreProductos = request.getParameterValues("nombreProducto");
			System.out.println(nombreProductos);
			for(String nombreProducto : nombreProductos)
			{
				ProductoDTO producto = new ProductoDTO();
				producto.setIdCliente(idEmpresa);
				producto.setNombre(nombreProducto);
				try {
					Delegate.getInstancia().saveProductoEmpresa(producto);
				} catch (CommunicationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (NotBoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			RequestDispatcher rd = request.getRequestDispatcher("index.jsp?msg="
					+ "Los productos fueron cargados con exito");
			rd.forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
